home *** CD-ROM | disk | FTP | other *** search
/ InterCD 2000 September / september_2000.iso / intercd / root / ^Linux / WindowMaker / src / screen.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-03-27  |  11.6 KB  |  358 lines

  1. /*
  2.  *  Window Maker window manager
  3.  * 
  4.  *  Copyright (c) 1997, 1998 Alfredo K. Kojima
  5.  * 
  6.  *  This program is free software; you can redistribute it and/or modify
  7.  *  it under the terms of the GNU General Public License as published by
  8.  *  the Free Software Foundation; either version 2 of the License, or
  9.  *  (at your option) any later version.
  10.  *
  11.  *  This program is distributed in the hope that it will be useful,
  12.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  *  GNU General Public License for more details.
  15.  *
  16.  *  You should have received a copy of the GNU General Public License
  17.  *  along with this program; if not, write to the Free Software
  18.  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 
  19.  *  USA.
  20.  */
  21.  
  22. #ifndef WMSCREEN_H_
  23. #define WMSCREEN_H_
  24.  
  25. #include "wconfig.h"
  26. #include "WindowMaker.h"
  27. #include "plugin.h"
  28. #include <sys/types.h>
  29.  
  30. #include <proplist.h>
  31.  
  32.  
  33. #define WTB_LEFT    0
  34. #define WTB_RIGHT    1
  35.  
  36. #define WTB_FOCUSED    0
  37. #define WTB_UNFOCUSED    2
  38. #define WTB_PFOCUSED    4
  39. #define WTB_MENU 6
  40.  
  41. #ifdef GNOME_STUFF
  42. /* an area of the screen reserved by some window */
  43. typedef struct WReservedArea {
  44.     WArea area;
  45.     Window window;
  46.     struct WReservedArea *next;
  47. } WReservedArea;
  48. #endif
  49.  
  50.  
  51. typedef struct WAppIconChain {
  52.     struct WAppIcon *aicon;
  53.     struct WAppIconChain *next;
  54. } WAppIconChain;
  55.  
  56.  
  57. /*
  58.  * each WScreen is saved into a context associated with it's root window
  59.  */
  60. typedef struct _WScreen {
  61.     int    screen;                   /* screen number */
  62.  
  63. #if 0
  64.     Atom managerAtom;               /* WM_Sn atom for manager selection */
  65.     Window managerWindow;           /* window for manager selection */
  66. #endif
  67.     Window info_window;               /* for our window manager info stuff */
  68.  
  69.     int scr_width;               /* size of the screen */
  70.     int scr_height;
  71.  
  72. #ifdef VIRTUAL_DESKTOP
  73.     Window virtual_edge_u;
  74.     Window virtual_edge_d;
  75.     Window virtual_edge_l;
  76.     Window virtual_edge_r;
  77. #endif
  78.  
  79.     Window root_win;               /* root window of screen */
  80.     int  depth;                   /* depth of the default visual */
  81.     Colormap colormap;               /* root colormap */
  82.     int root_colormap_install_count;
  83.     struct WWindow *original_cmap_window; /* colormap before installing
  84.                     * root colormap temporarily */
  85.     struct WWindow *cmap_window;
  86.     Colormap current_colormap;
  87.  
  88.     Window w_win;               /* window to use as drawable
  89.                     * for new GCs, pixmaps etc. */
  90.     Visual *w_visual;
  91.     int  w_depth;
  92.     Colormap w_colormap;           /* our colormap */
  93.  
  94.     Window no_focus_win;           /* window to get focus when nobody
  95.                     * else can do it */
  96.  
  97.     struct WWindow *focused_window;    /* window that has the focus
  98.                     * Use this list if you want to
  99.                     * traverse the entire window list
  100.                     */
  101.     
  102.     WMBag *selected_windows;
  103.  
  104.     struct WAppIcon *app_icon_list;    /* list of all app-icons on screen */
  105.  
  106.     struct WApplication *wapp_list;    /* list of all aplications */
  107.  
  108.     WMBag *stacking_list;           /* bag of lists of windows
  109.                     * in stacking order.
  110.                     * Indexed by window level
  111.                     * and each list on the array
  112.                     * is ordered from the topmost to
  113.                     * the lowest window
  114.                     */
  115.  
  116.     int window_count;               /* number of windows in window_list */
  117.  
  118.     int workspace_count;           /* number of workspaces */
  119.  
  120.     struct WWorkspace **workspaces;    /* workspace array */
  121.  
  122.     int current_workspace;           /* current workspace number */
  123.  
  124.  
  125. #ifdef GNOME_STUFF
  126.     WReservedArea *reservedAreas;      /* used to build totalUsableArea */
  127. #endif
  128.  
  129.     WArea usableArea;               /* area of the workspace where
  130.                     * we can put windows on, as defined
  131.                     * by other clients (not us) */
  132.     WArea totalUsableArea;           /* same as above, but including
  133.                     * the dock and other stuff */
  134.     
  135.  
  136.     WMPixel black_pixel;
  137.     WMPixel white_pixel;
  138.     
  139.     WMPixel light_pixel;
  140.     WMPixel dark_pixel;
  141.  
  142.     Pixmap stipple_bitmap;
  143.     Pixmap transp_stipple;           /* for making holes in icon masks for
  144.                     * transparent icon simulation */
  145.     WMFont *title_font;               /* default font for the titlebars */
  146.     WMFont *menu_title_font;           /* font for menu titlebars */
  147.     WMFont *menu_entry_font;           /* font for menu items */
  148.     WMFont *icon_title_font;           /* for icon titles */
  149.     WMFont *clip_title_font;           /* for clip titles */
  150.     WMFont *info_text_font;           /* text on things like geometry
  151.                     * hint boxes */
  152.     WMFont *workspace_name_font;
  153.  
  154.     WMPixel select_pixel;
  155.     WMPixel select_text_pixel;
  156.     /* foreground colors */
  157.     WMPixel window_title_pixel[3];     /* window titlebar text (foc, unfoc, pfoc)*/
  158.     WMPixel menu_title_pixel[3];       /* menu titlebar text */
  159.     WMPixel clip_title_pixel[2];       /* clip title text */
  160.     WMPixel mtext_pixel;            /* menu item text */
  161.     WMPixel dtext_pixel;            /* disabled menu item text */
  162.     WMPixel line_pixel;
  163.     WMPixel frame_border_pixel;           /* frame border */
  164. #ifdef DRAWSTRING_PLUGIN
  165.     WFunction *drawstring_func[W_STRING_MEMBERS];
  166.                                     /* ftitle, utitle, ptitle, mtitle, mtext */
  167. #endif
  168.  
  169.  
  170.     union WTexture *menu_title_texture[3];/* menu titlebar texture (tex, -, -) */
  171.     union WTexture *window_title_texture[3];  /* win textures (foc, unfoc, pfoc) */
  172.     union WTexture *resizebar_texture[3];/* window resizebar texture (tex, -, -) */
  173.  
  174.     union WTexture *menu_item_texture; /* menu item texture */
  175.  
  176.     struct WTexSolid *menu_item_auxtexture; /* additional texture to draw menu
  177.                     * cascade arrows */
  178.     struct WTexSolid *icon_title_texture;/* icon titles */
  179.     
  180.     struct WTexSolid *widget_texture;
  181.  
  182.     struct WTexSolid *icon_back_texture; /* icon back color for shadowing */
  183.  
  184.     GC window_title_gc;               /* window title text GC */
  185.     GC menu_title_gc;               /* menu titles */
  186.     
  187.     GC icon_title_gc;               /* icon title background */
  188.     GC clip_title_gc;               /* clip title */
  189.     GC menu_entry_gc;               /* menu entries */
  190.     GC select_menu_gc;               /* selected menu entries */
  191.     GC disabled_menu_entry_gc;           /* disabled menu entries */
  192.     GC info_text_gc;               /* for size/position display */
  193.     GC icon_select_gc;
  194.  
  195.     GC frame_gc;               /* gc for resize/move frame (root) */
  196.     GC line_gc;                   /* gc for drawing XORed lines (root) */
  197.     GC copy_gc;                   /* gc for XCopyArea() */
  198.     GC stipple_gc;               /* gc for stippled filling */
  199.     GC draw_gc;                   /* gc for drawing misc things */
  200.     GC mono_gc;                   /* gc for 1 bit drawables */
  201.  
  202. #ifndef NEWSTUFF
  203.     struct WPixmap *b_pixmaps[PRED_BPIXMAPS]; /* internal pixmaps for buttons*/
  204. #endif
  205.     struct WPixmap *menu_radio_indicator;/* left menu indicator */
  206.     struct WPixmap *menu_check_indicator;/* left menu indicator for checkmark */
  207.     struct WPixmap *menu_mini_indicator;   /* for miniwindow */
  208.     struct WPixmap *menu_hide_indicator;   /* for hidden window */
  209.     struct WPixmap *menu_shade_indicator;  /* for shaded window */
  210.     int app_menu_x, app_menu_y;           /* position for application menus */
  211.  
  212. #ifndef LITE
  213.     struct WMenu *root_menu;           /* root window menu */
  214.     struct WMenu *switch_menu;           /* window list menu */
  215. #endif
  216.     struct WMenu *workspace_menu;      /* workspace operation */
  217.     struct WMenu *window_menu;           /* window command menu */
  218.     struct WMenu *icon_menu;           /* icon/appicon menu */
  219.     struct WMenu *workspace_submenu;   /* workspace list for window_menu */
  220.  
  221.     struct WDock *dock;               /* the application dock */
  222.     struct WPixmap *dock_dots;           /* 3 dots for the Dock */
  223.     Window dock_shadow;               /* shadow for dock buttons */
  224.     struct WAppIcon *clip_icon;        /* The clip main icon */
  225.     struct WMenu *clip_menu;           /* Menu for clips */
  226.     struct WMenu *clip_submenu;        /* Workspace list for clips */
  227.     struct WMenu *clip_options;           /* Options for Clip */
  228.     struct WMenu *clip_ws_menu;           /* workspace menu for clip */
  229.     struct WDock *last_dock;
  230.     WAppIconChain *global_icons;       /* for omnipresent icons chain in clip */
  231.     int global_icon_count;           /* How many global icons do we have */
  232.     
  233.     Window clip_balloon;           /* window for workspace name */
  234.     
  235.     int keymove_tick;
  236.  
  237. #ifdef GRADIENT_CLIP_ARROW
  238.     Pixmap clip_arrow_gradient;
  239. #endif
  240.  
  241.     struct RContext *rcontext;           /* wrlib context */
  242.     
  243.     WMScreen *wmscreen;               /* for widget library */
  244.     
  245.     struct RImage *icon_tile;
  246.     struct RImage *clip_tile;
  247.     Pixmap icon_tile_pixmap;           /* for app supplied icons */
  248.  
  249.     Pixmap def_icon_pixmap;           /* default icons */
  250.     Pixmap def_ticon_pixmap;
  251.  
  252.     struct WDialogData *dialog_data;
  253.     
  254.     
  255.     struct W_GeometryView *gview;      /* size/position view */
  256.  
  257. #ifdef NEWSTUFF
  258.     struct RImage *button_images[2][PRED_BPIXMAPS];/* scaled tbar btn images */
  259. #endif
  260.  
  261.     /* state and other informations */
  262.     short cascade_index;           /* for cascade window placement */
  263.  
  264.     proplist_t session_state;
  265.  
  266.     /* for double-click detection */
  267.     Time last_click_time;
  268.     Window last_click_window;
  269.     int last_click_button;
  270.     
  271.     /* balloon help data */
  272.     struct _WBalloon *balloon;
  273.  
  274.     /* workspace name data */
  275.     Window workspace_name;
  276.     WMHandlerID *workspace_name_timer;
  277.     struct WorkspaceNameData *workspace_name_data;
  278.  
  279.     /* for raise-delay */
  280.     WMHandlerID *autoRaiseTimer;
  281.     Window autoRaiseWindow;           /* window that is scheduled to be
  282.                     * raised */
  283.  
  284.  
  285.     Window scrolledFMaximize;           /* full maximized window which was
  286.                     scrolled down for titlebar access */
  287.  
  288.     /* for window shortcuts */
  289.     WMBag *shortcutWindows[MAX_WINDOW_SHORTCUTS];
  290.  
  291. #ifdef XDND
  292.     char *xdestring;
  293. #endif
  294.  
  295. #ifdef KWM_HINTS
  296.     Window kwm_dock;
  297. #endif
  298.  
  299.     int helper_fd;
  300.     pid_t helper_pid;
  301.  
  302.     struct {
  303.     unsigned int startup:1;           /* during window manager startup */
  304.     unsigned int regenerate_icon_textures:1;
  305.     unsigned int dnd_data_convertion_status:1;
  306.     unsigned int root_menu_changed_shortcuts:1;
  307.     unsigned int added_workspace_menu:1;
  308.     unsigned int startup2:1;       /* startup phase 2 */
  309.     unsigned int supports_tiff:1;
  310.     unsigned int clip_balloon_mapped:1;
  311.     unsigned int next_click_is_not_double:1;
  312.     unsigned int backimage_helper_launched:1;
  313.     /* some client has issued a WM_COLORMAP_NOTIFY */
  314.     unsigned int colormap_stuff_blocked:1;
  315.     unsigned int doing_alt_tab:1;
  316.     unsigned int jump_back_pending:1;
  317. #ifdef KWM_HINTS
  318.     unsigned int kwm_syncing_name:1;
  319.     unsigned int kwm_syncing_count:1;
  320. #endif
  321.     } flags;
  322. } WScreen;
  323.  
  324.  
  325. #define WSS_ROOTMENU    (1<<0)
  326. #define WSS_SWITCHMENU    (1<<1)
  327. #define WSS_WSMENU    (1<<2)
  328.  
  329. /* changes must update wSaveScreenState/getWorkspaceState */
  330. typedef struct WWorkspaceState {
  331.     int flags;
  332.     int workspace;
  333. #if 0  /* obsoleted by saving menus position in WMState */
  334.     int menu_x, menu_y;
  335.     int smenu_x, smenu_y;
  336.     int wmenu_x, wmenu_y;
  337. #endif
  338. } WWorkspaceState;
  339.  
  340.  
  341. WScreen *wScreenInit(int screen_number);
  342. void wScreenSaveState(WScreen *scr);
  343. void wScreenRestoreState(WScreen *scr);
  344.  
  345. int wScreenBringInside(WScreen *scr, int *x, int *y, int width, int height);
  346.  
  347. /* in startup.c */
  348. WScreen *wScreenWithNumber(int i);
  349. WScreen *wScreenForRootWindow(Window window);   /* window must be valid */
  350. WScreen *wScreenSearchForRootWindow(Window window);
  351. WScreen *wScreenForWindow(Window window);   /* slower than above functions */
  352.  
  353. void wScreenFinish(WScreen *scr);
  354.  
  355. void wScreenUpdateUsableArea(WScreen *scr);
  356.  
  357. #endif
  358.